package javaAdvanced;

import java.util.Arrays;

/**
 * java注解的皮毛学习和使用
 *
 * @author cuiH
 * Date: 13-12-3
 * @since 1.5
 */
@AnnotationOne(color = "red",value = "valueTest1",arrayAttr = {1,2,3},annotationAttr = @AnnotationSec("not default annotation value"))
public class AnnotationTest {
    /**
     * java注解在编译时候不编译为字节码
     * 简单的说：java注释是给人看的，java注解是给机器看的
     *
     * 可以加在包上面，类上面（eg@service），成员变量，局部变量上面等等；
     */

    @AnnotationOne("valueTest2")       //默认只写一个参数的时候，相当于value的参数
    public static void main(String[] args) {
        AnnotationTest.test3();             //基本注解的使用

        if (AnnotationTest.class.isAnnotationPresent(AnnotationOne.class)) {                  //检查该注解是否存在
            AnnotationOne annotation = AnnotationTest.class.getAnnotation(AnnotationOne.class);
            System.out.println("注解的属性 color输出："+annotation.color());
            System.out.println("注解的属性 value输出："+annotation.value());                  //采用的是外面
            System.out.println("注解的属性 arrayAttr："+ Arrays.toString(annotation.arrayAttr()));
            System.out.println("注解的属性 枚举："+annotation.lamp().nextLamp().name());
            System.out.println("注解的属性 注解："+annotation.annotationAttr().value());    //注解套用注解

        }
    }


    /**
     * 下面两个方法可以看出注解用途
     * JDK5提供的三个基本注解：@Override @SuppressWarnings（对警告保持作废） @Deprecated（作废）
     */
    public static void test1() {
        System.runFinalizersOnExit(true);
    }

    @SuppressWarnings("deprecation")
    public static void test2() {
        System.runFinalizersOnExit(true);
    }

    @Deprecated   //作废该方法
    public static void test3() {
        System.out.println("崔小涣今年10岁");
    }
}
